package br.com.foxinline.modelo;

import br.com.foxinline.enums.AplicacaoCampo;
import br.com.foxinline.enums.TipoAtoCampo;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.*;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.NotBlank;

/**
 *
 * @author laverson
 */
@Entity
public class AtoCampo implements Serializable{
    
    @Id
    @SequenceGenerator(name = "seq_ato_campo", sequenceName = "seq_ato_campo", allocationSize=1 )
    @GeneratedValue(generator = "seq_ato_campo", strategy = GenerationType.SEQUENCE)
    private Long id;

    private boolean ativo = true;

    @Temporal(TemporalType.TIMESTAMP)
    private Date dataCricao = new Date();

    @Column(length=80)
    @NotBlank
    @NotNull
    private String nome;
    
    @Enumerated(EnumType.STRING)
    private TipoAtoCampo tipo;
    
    @Enumerated(EnumType.STRING)
    private AplicacaoCampo aplicacao;
    
    public AtoCampo() {}

    public AtoCampo(Long id, String nome, TipoAtoCampo tipo, AplicacaoCampo aplicacao) {
        this.id = id;
        this.nome = nome;
        this.tipo = tipo;
        this.aplicacao = aplicacao;
    }

    public AplicacaoCampo getAplicacao() {
        return aplicacao;
    }

    public void setAplicacao(AplicacaoCampo aplicacao) {
        this.aplicacao = aplicacao;
    }

    public boolean isAtivo() {
        return ativo;
    }

    public void setAtivo(boolean ativo) {
        this.ativo = ativo;
    }

    public Date getDataCricao() {
        return dataCricao;
    }

    public void setDataCricao(Date dataCricao) {
        this.dataCricao = dataCricao;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public TipoAtoCampo getTipo() {
        return tipo;
    }

    public void setTipo(TipoAtoCampo tipo) {
        this.tipo = tipo;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final AtoCampo other = (AtoCampo) obj;
        if (this.id != other.id && (this.id == null || !this.id.equals(other.id))) {
            return false;
        }
        if (this.ativo != other.ativo) {
            return false;
        }
        if (this.dataCricao != other.dataCricao && (this.dataCricao == null || !this.dataCricao.equals(other.dataCricao))) {
            return false;
        }
        if ((this.nome == null) ? (other.nome != null) : !this.nome.equals(other.nome)) {
            return false;
        }
        if (this.tipo != other.tipo) {
            return false;
        }
        if (this.aplicacao != other.aplicacao) {
            return false;
        }
        return true;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (this.id != null ? this.id.hashCode() : 0);
        hash = 37 * hash + (this.ativo ? 1 : 0);
        hash = 37 * hash + (this.dataCricao != null ? this.dataCricao.hashCode() : 0);
        hash = 37 * hash + (this.nome != null ? this.nome.hashCode() : 0);
        hash = 37 * hash + (this.tipo != null ? this.tipo.hashCode() : 0);
        hash = 37 * hash + (this.aplicacao != null ? this.aplicacao.hashCode() : 0);
        return hash;
    }

    @Override
    public String toString() {
        return "AtoCampo{" + "id=" + id + ", ativo=" + ativo + ", dataCricao=" + dataCricao + ", nome=" + nome + ", tipo=" + tipo + ", aplicacao=" + aplicacao + '}';
    }

}
